package com.mobile.service.mapper;

import com.mobile.service.dto.UserDTO;
import com.mobile.service.dto.UserQueryDTO;
import com.mobile.util.PageData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户信息管理Mapper接口
 *
 * @author Administrator
 * @version 0.1 2021-01-15 初版
 */
@Mapper
public interface UserMapper {

    /**
     * 根据用户代码和密码查询用户信息
     *
     * @param params 查询参数
     * @return 用户信息
     */
    PageData getUserByCodeAndPwd(PageData params);

    /**
     * 获取通知人员信息
     *
     * @param params 查询参数
     * @return 通知人员信息
     */
    PageData getNotifier(PageData params);

    /**
     * 根据用户代码查询用户信息
     *
     * @param userCode 用户代码
     * @return 用户信息
     */
    PageData getUserByCode(@Param("userCode") String userCode);

    /**
     * 根据工号查询用户信息
     *
     * @param jobNo 工号
     * @return 用户信息
     */
    PageData getUserByJobNo(@Param("jobNo") String jobNo);

    /**
     * 根据用户代码查询用户信息（包括已删除的用户）
     *
     * @param userCode 用户代码
     * @return 用户信息
     */
    PageData getUserByCodeForDelete(@Param("userCode") String userCode);

    /**
     * 修改用户密码
     *
     * @param user 用户信息
     * @return 影响行数
     */
    int updatePassword(PageData user);

    /**
     * 修改用户信息
     *
     * @param user 用户信息
     * @return 影响行数
     */
    int updateUser(PageData user);

    /**
     * 修改用户登录时间
     *
     * @param user 用户信息
     * @return 影响行数
     */
    int updateUserLoginTime(PageData user);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号
     * @return 用户信息
     */
    PageData getUserByPhone(@Param("phone") String phone);

    /**
     * 根据设备号获取手机号
     *
     * @param machineNo 设备号
     * @return 手机号
     */
    String getPhoneByMachineNo(@Param("machineNo") String machineNo);

    /**
     * 用户列表分页查询
     *
     * @param userQueryDTO 查询条件
     * @return 用户列表
     */
    List<UserDTO> userlistPage(UserQueryDTO userQueryDTO);

    /**
     * 根据用户代码获取KPI考勤信息
     *
     * @return KPI考勤信息
     */
    PageData getKpiAttendanceByUserCode();

    /**
     * 批量插入KPI考勤信息
     *
     * @return 插入结果
     */
    PageData insertKpiAttendanceBatch();

    /**
     * 获取用户列表
     *
     * @return 用户列表
     */
    List<PageData> userlist();

    /**
     * 获取用户列表1
     *
     * @return 用户列表
     */
    List<PageData> userlist1();

    /**
     * 根据ID获取公司信息
     *
     * @param params 查询参数
     * @return 公司信息
     */
    PageData getCompanyById(PageData params);

    /**
     * 新增用户
     *
     * @param user 用户信息
     * @return 影响行数
     */
    int addUser(PageData user);

    /**
     * 批量新增用户
     *
     * @param users 用户列表
     * @return 影响行数
     */
    int addUserBatch(@Param("list") List<PageData> users);

    /**
     * 批量插入用户权限关系
     *
     * @param userAuthList 用户权限关系列表
     * @return 影响行数
     */
    int addUserAuth(@Param("list") List<PageData> userAuthList);

    /**
     * 根据用户代码删除用户
     *
     * @param userCode 用户代码
     * @return 影响行数
     */
    int deleteUserByCode(@Param("userCode") String userCode);

    /**
     * 根据用户代码删除用户权限关系
     *
     * @param userCode 用户代码
     * @return 影响行数
     */
    int deleteUserAuthByCode(@Param("userCode") String userCode);

    /**
     * 根据用户代码获取用户权限
     *
     * @param userCode 用户代码
     * @return 权限列表
     */
    List<String> getUserAuthByUserCode(@Param("userCode") String userCode);

    /**
     * 根据角色ID获取角色权限
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
    List<String> getRoleAuthByRoleId(@Param("roleId") Integer roleId);

    /**
     * 查询该角色具有权限的最顶级父菜单
     *
     * @param roleId 角色ID
     * @return 菜单列表
     */
    List<PageData> getParentMenuByRole(@Param("roleId") Integer roleId);

    /**
     * 根据父菜单ID查询该角色具有权限的子菜单
     *
     * @param params 查询参数
     * @return 菜单列表
     */
    List<PageData> getSubMenuByRole(PageData params);

    /**
     * 查询该用户具有权限的最顶级父菜单
     *
     * @param userCode 用户代码
     * @return 菜单列表
     */
    List<PageData> getParentMenuByUser(@Param("userCode") String userCode);

    /**
     * 根据父菜单ID查询该用户具有权限的子菜单
     *
     * @param params 查询参数
     * @return 菜单列表
     */
    List<PageData> getSubMenuByUser(PageData params);

    /**
     * 获取用户手机号信息
     *
     * @return 用户手机号列表
     */
    List<PageData> getUserPhone();

    /**
     * 获取角色权限关系列表
     *
     * @param roleId 角色ID
     * @return 权限关系列表
     */
    List<PageData> getRoleAuthRelationList(@Param("roleId") Integer roleId);

    /**
     * 根据用户代码列表获取用户手机号
     *
     * @param userCodes 用户代码列表
     * @return 用户手机号列表
     */
    List<PageData> getUserPhoneByUserCode(@Param("list") List<String> userCodes);

    /**
     * 获取用户列表用于搜索
     *
     * @return 用户列表
     */
    List<PageData> getUserListForSearch();
}